<!DOCTYPE html>
<html lang="zh-CN">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>const注意的事项</title>
</head>

<body>
</body>
<!--  -->
<script>
  "use strict"; {
    // 1.在块作用域内使用const声明的变量不能改变块外var声明的变量
    // 下面const声明的x变量，不能改变块外var声明的x变量值。
    var x = 10; {
      const x = 10;
      console.log(x);
    }; {
      // 2.使用const声明变量时，必须在声明变量时就赋值，不能先声明变量再赋值。
      // const PI
      // PI = 3.14159
    }; {
      // 3.使用const定义变量后，不能再通过赋值改变它的原始值，否则，会引发错误。
      const PI = 3.14;
      // PI = 3.15; 会报错
      // PI = PI +10 也会拨错
    }; {
      // 4.使用const定义的对象与定义变量不同，const定义的对象，可以更改对象的属性，也可以向对象添加属性。
      const car = {
        types: "车",
        model: "911",
        color: "红色"
      };
      car.color = "青色";
    }; {
      // 5.使用const定义的数组，也可以通过下标来更改数组元素值，同时，还可以使用push()方法向数组添加元素。
      const phone = ["好人", "坏人", "来人"];
      phone[0] = "不是人";
      phone.push("看人");
    }; {
      // 6.在同一作用域内，在已使用var或let定义的变量后，不能再使用const定义变量。但在不同的作用域，使用const重新定义变量是可以的。
      const a = 2; {
        const a = 3
      }; {
        const a = 4;
      }

      /* 
        var x = 2;
        const x = 2; 报错
        {
          let x = 2; 
          const x = 2; 报错
        }
       */
    }
  }
</script>

</html>